package com.electricfan.dao;

import java.util.List;

public interface IBaseDao
{

    /**
     * 插入一个实体（在数据库INSERT一条记录）
     * 
     * @param <T>
     * @param sqlStr
     * @param entity
     */
    public <T> T insert(String sqlStr, T entity);

    /**
     * 修改一个实体对象（UPDATE一条记录）
     * 
     * @param <T>
     * @param sqlStr
     * @param entity
     * @return
     */
    public <T> int update(String sqlStr, T entity);

    /**
     * 根据指定的唯一列值，删除一行
     * 
     * @param <T>
     * @param sqlStr
     * @param primaryKey
     * @return
     */
    public <T> int delete(String sqlStr, T primaryKey);

    /**
     * 查询指定的sql语句的行数
     * 
     * @param sqlStr
     * @return
     */
    public int count(String sqlStr);

    /**
     * 按指定的唯一键，取一行
     * 
     * @param <T>
     * @param <PK>
     * @param sqlStr
     * @param primaryKey
     * @return
     */
    public <T extends Object, PK> T getOne(String sqlStr, PK primaryKey);

    /**
     * 取全部记录
     * 
     * @param <T>
     * @param sqlStr
     * @return
     */
    public <T> List<T> selectAll(String sqlStr);

    /**
     * 批量添加
     * 
     * @param <T>
     * @param sqlStr
     * @param list
     */
    public <T> void batchInsert(String sqlStr, final List<T> list);

    /**
     * 批量修改
     * 
     * @param <T>
     * @param sqlStrs
     * @param list
     */
    public <T> void batchUpdate(String sqlStrs, final List<T> list);

    /**
     * 批量删除
     * 
     * @param <T>
     * @param sqlStr
     * @param list
     */
    public <T> void batchDelete(String sqlStr, final List<T> list);

}